package cn.kgc.shiro;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.subject.Subject;

/**
 * 使用shiro如何完成认证操作
 */
public class ShiroAuthentication2 {
    public static void main(String[] args) {

        //创建安全管理器   SecurityManager
        DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();

        //  创建 realm 域对象  实现数据的查询操作   user.ini
        CustomerRealm customerRealm = new CustomerRealm();
        defaultSecurityManager.setRealm(customerRealm);

        //  将安全管理器 设置给SecurityUtils  最终subject 可以通过调用SecurityManager 实现认证和授权
        SecurityUtils.setSecurityManager(defaultSecurityManager);
        // 1.  获取认证的主体   Subject    ->  安全管理工具类    getSubject()
        Subject subject = SecurityUtils.getSubject();

        // 2. 认证     login(AuthenticationToken token)  如果该方法的执行 没有抛出异常 则认证通过
        UsernamePasswordToken token = new UsernamePasswordToken("jack", "666666");

        try {
            subject.login(token);
        } catch (UnknownAccountException e) {
            System.out.println("用户名错误");
        }catch (IncorrectCredentialsException e){
            System.out.println("密码错误");
        }

        // 判定是否已经认证通过
        boolean authenticated = subject.isAuthenticated();
        System.out.println("authenticated = " + authenticated);

    }
}
